// Decompiled by Jad v1.5.8e. Copyright 2001 Pavel Kouznetsov. // Jad home page: http://www.geocities.com/kpdus/jad.html // Decompiler options: braces fieldsfirst space lnc package cn.com.smartdevices.bracelet.lua; import android.content.Context; import android.content.res.Resources; import android.os.Environment; import cn.com.smartdevices.bracelet.DaoManager; import cn.com.smartdevices.bracelet.Debug; import cn.com.smartdevices.bracelet.Keeper; import cn.com.smartdevices.bracelet.webapi.WebAPI; import de.greenrobot.dao.Property; import de.greenrobot.dao.query.LazyList; import de.greenrobot.dao.query.QueryBuilder; import de.greenrobot.dao.query.WhereCondition; import de.greenrobot.daobracelet.LuaZipFile; import de.greenrobot.daobracelet.LuaZipFileDao; import java.io.BufferedReader; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.zip.ZipInputStream; import org.keplerproject.luajava.LuaState; import org.keplerproject.luajava.LuaStateFactory; // Referenced classes of package cn.com.smartdevices.bracelet.lua: // i, h, ConfigDynamicDataInfo public class LuaManager { private static LuaManager __instance = null; private Context context; private LuaState mLuaState; public LuaManager() { mLuaState = null; context = null; } private String getDBLuaFileByVersion(String s) { LuaZipFileDao luazipfiledao = DaoManager.getInstance().getLuaZipFileDao(); int j = (int)luazipfiledao.count(); Debug.i("chenee", (new StringBuilder()).append("lzipDao.count:").append(j).toString()); if (j > 0) { QueryBuilder querybuilder = luazipfiledao.queryBuilder(); Property aproperty[] = new Property[1]; aproperty[0] = de.greenrobot.daobracelet.LuaZipFileDao.Properties.Version; querybuilder.orderDesc(aproperty); querybuilder.where(de.greenrobot.daobracelet.LuaZipFileDao.Properties.Version.eq(s), new WhereCondition[0]); LuaZipFile luazipfile = (LuaZipFile)querybuilder.listLazy().get(0); String s1 = luazipfile.getVersion(); Debug.i("chenee", (new StringBuilder()).append("luaZipFile.version:").append(s1).toString()); return unzip(luazipfile.getZipFile()); } else { Debug.e("chenee", (new StringBuilder()).append("read DB zip failed,version:").append(s).toString()); return null; } } private String getDefaultLuaFileVersion() { InputStream inputstream; BufferedReader bufferedreader; inputstream = context.getResources().openRawResource(0x7f060004); bufferedreader = new BufferedReader(new InputStreamReader(inputstream)); _L2: String s; String s1; try { s = bufferedreader.readLine(); } catch (IOException ioexception) { ioexception.printStackTrace(); Debug.e("chenee", "read res/raw/luafile.lua version error!!"); return null; } if (s == null) { break MISSING_BLOCK_LABEL_75; } if (!s.trim().startsWith("__luaVersion=")) goto _L2; else goto _L1 _L1: s1 = s.substring("__luaVersion=".length()); inputstream.close(); return s1.trim(); inputstream.close(); return null; } public static LuaManager getInstance() { if (__instance == null) { return null; } else { return __instance; } } public static LuaManager getInstance(Context context1) { if (__instance == null) { LuaManager luamanager = new LuaManager(); luamanager.context = context1; luamanager.resetLuaState(); __instance = luamanager; } return __instance; } private String getLatestDBLuaFile() { LuaZipFileDao luazipfiledao = DaoManager.getInstance().getLuaZipFileDao(); int j = (int)luazipfiledao.count(); Debug.i("chenee", (new StringBuilder()).append("lzipDao.count:").append(j).toString()); if (j > 0) { QueryBuilder querybuilder = luazipfiledao.queryBuilder(); Property aproperty[] = new Property[1]; aproperty[0] = de.greenrobot.daobracelet.LuaZipFileDao.Properties.Version; querybuilder.orderDesc(aproperty); LuaZipFile luazipfile = (LuaZipFile)querybuilder.listLazy().get(0); String s = luazipfile.getVersion(); String s1 = getDefaultLuaFileVersion(); if (s.compareTo(s1) <= 0) { Debug.e("chenee", (new StringBuilder()).append("version compare failed: version:").append(s).append(" default version is:").append(s1).toString()); return null; } else { Debug.i("chenee", (new StringBuilder()).append("use latest script, version:").append(s).append(" (default version is:").append(s1).append(")").toString()); return unzip(luazipfile.getZipFile()); } } else { Debug.e("chenee", "read DB zip file failed"); return null; } } private void getLatestLuaZipFile() { WebAPI.getLuaScript(Keeper.readLoginData(), new i(this)); } private void getLatestLuaZipFileWithVersionCheck() { WebAPI.getLuaScriptVersion(Keeper.readLoginData(), new h(this)); } private String getSDCardLuaFile(String s) { String s1 = (new StringBuilder()).append(Environment.getExternalStorageDirectory().getPath()).append(s).toString(); String s2; try { FileInputStream fileinputstream = new FileInputStream(s1); byte abyte0[] = new byte[fileinputstream.available()]; fileinputstream.read(abyte0); fileinputstream.close(); ByteArrayOutputStream bytearrayoutputstream = new ByteArrayOutputStream(); bytearrayoutputstream.write(abyte0); s2 = bytearrayoutputstream.toString(); } catch (Exception exception) { Debug.e("chenee", (new StringBuilder()).append("read failed: ").append(s1).toString()); return null; } return s2; } private String getSDCardZipLuaFile() { String s; try { FileInputStream fileinputstream = new FileInputStream((new StringBuilder()).append(Environment.getExternalStorageDirectory().getPath()).append("/cheneeispig_hm.zip").toString()); byte abyte0[] = new byte[fileinputstream.available()]; fileinputstream.read(abyte0); fileinputstream.close(); s = unzip(abyte0); } catch (Exception exception) { Debug.e("chenee", "read sdcard/strangeName.zip failed"); return null; } return s; } private void initLocalizationLua() { String s = getSDCardLuaFile("/localization_chinese.lua"); String s1 = getSDCardLuaFile("/localization_english.lua"); String s2 = getSDCardLuaFile("/localization_traditional_chinese.lua"); String s3 = getSDCardLuaFile("/localization.lua"); if (s3 != null && s != null && s1 != null) { mLuaState.LdoString(s); mLuaState.LdoString(s1); mLuaState.LdoString(s2); mLuaState.LdoString(s3); } else { int ai[] = { 0x7f060001, 0x7f060002, 0x7f060003, 0x7f060000 }; int j = ai.length; int k = 0; while (k < j) { int l = ai[k]; String s4 = readStream(context.getResources().openRawResource(l)); mLuaState.LdoString(s4); k++; } } } private void loadScriptFile() { String s = getSDCardZipLuaFile(); if (s == null) { s = getLatestDBLuaFile(); } initLocalizationLua(); if (s == null) { s = readStream(context.getResources().openRawResource(0x7f060004)); } mLuaState.LdoString(s); luaSendVersion(); } private void luaSendVersion() { ConfigDynamicDataInfo configdynamicdatainfo = ConfigDynamicDataInfo.getInstance(); String s = Keeper.readApkVersion(); mLuaState.getField(LuaState.LUA_GLOBALSINDEX.intValue(), "setVersion"); mLuaState.pushJavaObject(configdynamicdatainfo); mLuaState.pushString(s); callLua(2, 0); } private String readStream(InputStream inputstream) { ByteArrayOutputStream bytearrayoutputstream; int j; String s; try { bytearrayoutputstream = new ByteArrayOutputStream(); j = inputstream.read(); } catch (IOException ioexception) { Debug.e("chenee", "read res/raw/luafile.lua failed"); return ""; } if (j == -1) { break MISSING_BLOCK_LABEL_35; } bytearrayoutputstream.write(j); j = inputstream.read(); break MISSING_BLOCK_LABEL_14; s = bytearrayoutputstream.toString(); return s; } public void callLua(int j, int k) { int l = mLuaState.pcall(j, k, 0); if (l != 0) { String s = mLuaState.toString(-1); Debug.e("chenee", (new StringBuilder()).append("LuaERROR:(").append(l).append(") ").append(s).toString()); } } public void checkServerLua() { getInstance().getLatestLuaZipFileWithVersionCheck(); } public LuaState getLuaState() { return mLuaState; } public void resetLuaState() { if (mLuaState != null) { mLuaState.close(); } mLuaState = LuaStateFactory.newLuaState(); mLuaState.openLibs(); loadScriptFile(); } public String unzip(byte abyte0[]) { ZipInputStream zipinputstream = new ZipInputStream(new ByteArrayInputStream(abyte0)); String s = null; _L3: ByteArrayOutputStream bytearrayoutputstream; int j; if (zipinputstream.getNextEntry() == null) { break; /* Loop/switch isn't completed */ } bytearrayoutputstream = new ByteArrayOutputStream(); j = zipinputstream.read(); _L1: if (j == -1) { break MISSING_BLOCK_LABEL_62; } bytearrayoutputstream.write(j); j = zipinputstream.read(); goto _L1 String s1; zipinputstream.closeEntry(); s1 = bytearrayoutputstream.toString(); s = s1; if (true) goto _L3; else goto _L2 _L2: zipinputstream.close(); return s; IOException ioexception; ioexception; Debug.e("chenee", ioexception.getMessage()); ioexception.printStackTrace(); zipinputstream.close(); return s; Exception exception1; exception1; _L5: Debug.e("chenee", exception1.getMessage()); exception1.printStackTrace(); return s; Exception exception; exception; zipinputstream.close(); throw exception; Exception exception2; exception2; exception1 = exception2; s = null; if (true) goto _L5; else goto _L4 _L4: } }